package io.gitee.xyuesheng.mapper;

import io.gitee.xyuesheng.entity.Daily;
import org.apache.ibatis.annotations.Param;

import java.util.List;

//封装了Daily表的 增删查改 方法
public interface DailyMapper {
    //根据ID查询Daily
    //select * from daily where id = xxx
    Daily findById(Long id);

    //    insert into daily(uid,digest,content,updated_by,views,stars,favorites,status)
//    value(#{uid},#{digest},#{content},#{updated_by},#{views},#{stars},#{favorites},#{status});
//    #{uid} => daily.getUid()
//    #{updated_by} => daily.getUpdated_by()
    void insert(Daily daily);

    //根据日报只要模糊查询
    //select * from daily where digest like '今天%'
    //findList("今天%","created")
    //@Param  注解
    List<Daily> findList(@Param("digest") String digest, @Param("field") String sortField);

    void deleteById(Long id);

    //update daily set xx=xx,yy=yy where id = 1
    void update(Daily daily);

    /**
     * 根据创建时间和用户id查询日报
     * 创建时间 -》daily.created
     * 用户id -》daily.user.id
     * #{user.id} -》daily.getUser().getId()
     *
     * @param daily
     * @return
     */
    List<Daily> findByCreatedAndUserId(Daily daily);

    //查询日报总条数
    int count();

    //拼条件查询。可能传过来的条件：digest,content,created
    //如果只传一个条件，就按一个条件查询
    //如果一个条件都没传，就查所有数据
    List<Daily> findByDaily(Daily daily);

    //根据多个id号查询日报列表
//    List<Daily> findByIds(List<Long> ids);
    List<Daily> findByIds(Long[] ids);

    //根据日期和用户的名字查找日报
    List<Daily> findByCreatedAndUserName(Daily daily);

    //使用foreach，同时插入多条daily记录（批量插入）
    void insertByForeach(List<Daily> daily);

    //根据日报id查询日报，关联查询日报对应的用户（一对一）
    Daily findByIdWithUser(Long id);

    //查询日报列表，关联查询关键字（一对多）
    List<Daily> findDailies();

    /**
     * 分页查询
     *
     * @param start-起始位置（从0开始，数据记录的下标）
     * @param size-记录条数
     * @return
     */
    List<Daily> findAll(@Param("start") Long start, @Param("size") Long size);

}
